1. Field of the Invention
This invention relates generally to web applications, e.g., distributed software applications in which a client computer executes web browser software to interact with one or more server computers.
2. Description of the Related Art
In a web application a client computer executes web browser software to communicate with one or more server computers. The server computer(s) may modify state information based on requests received from the web browser. For example, in many web applications, a web server computer receives a request from a web browser and forwards the request[LA1] to application software, e.g., where the application software may execute on the web server computer or on one or more separate application server computers. The application software may then modify state information in response to the request, such as application data, session data, or other types of state information.
In many web applications, the application software is implemented according to an N-tier architecture, e.g., where the application software is organized into multiple tiers. For example, the software in each tier may be implemented as components which are separate from components in other tiers. This may enable different aspects of the application to be largely isolated from each other. For example, many web applications utilize a 3-tier architecture including a presentation tier, application tier, and data tier. The software in different tiers may execute on the same application server as each other or may execute on different application servers.
Each tier may maintain its own state information, which may be modified in response to client requests. For example, software in the presentation tier may maintain state information related to communication sessions, software in the application tier may maintain state information related to application logic objects, and software in the data tier may maintain state information related to application data. The state information of each respective tier may be created and stored separately from the state information of other tiers. For example, the presentation tier state information and application tier state information may each be stored in different data structures in dynamic memory[LA2], and the tier state information may be stored in a database.
In some web applications, state information may be replicated across different application servers. For example, a web application may respond to a request by modifying state information on both a primary application server and a secondary application server, e.g., where each application server maintains a copy of the state information.
Data coherency problems may arise if a failure occurs while a client request is being processed. For example, if the application server fails after the state information in the presentation and application tiers is modified but before the state information in the data tier is modified then the state information in the data tier may be incoherent with respect to the state information in the other tiers.
As another example, if some or all of the state information is replicated across different application servers then a failure while processing the client request may result in the respective copies of the state information being incoherent with each other, e.g., if the failure results in the state information being modified on a subset, but not all, of the application servers.
As another example, if the state information in all the tiers is successfully modified, but the web server fails before a response is returned to the client computer then the user of the client computer may not know whether the request was successfully performed or not. Thus, the user may be forced to submit the request a second time. This may be particularly problematic for non-idempotent requests, e.g., requests that produce different results when processed multiple times. Also, if the web server fails then the user of the client computer may see an error page indicating that the network connection to the web server failed, which is undesirable in many applications.